www.gusucode.com > 7波段参数均衡器源码程序 > 7波段参数均衡器源码程序/code/Parametric EQ/highpassEQ.m

    function [Hd]=highpassEQ(fc,g,N)

fs=44100;
% parameter limits 
if fc < 20
    fc=20;
end
if fc > 20000
    fc=20000;
end

% coefficient calculation
if N==1
    g=10^(g/20);
    a1=-0.5*tan(pi*(fc/fs-0.25));
    b0=g*(0.25+0.5*a1);
    b1=-b0;
    b2=0;
    a2=0;
    % SOS Form
    b=2*[b0 b1 b2];
    a=[1 -2*a1 -2*a2];
    [sos,g]=tf2sos(b,a);
    Hd=dfilt.df1sos(sos,g);
elseif N==2
    g=10^(g/20);
    t0=tan(pi*fc/fs);
    t1=1+sqrt(2)*t0+t0^2;
    a1=(1-t0^2)/t1;
    a2=0.5*(sqrt(2)*t0-1-t0^2)/t1;
    b0=g/(2*t1);
    b1=-2*b0;
    b2=b0;
    % SOS Form
    b=2*[b0 b1 b2];
    a=[1 -2*a1 -2*a2];
    [sos,g]=tf2sos(b,a);
    Hd=dfilt.df1sos(sos,g);
elseif N==3
    g=10^(g/20);
    t0=tan(pi*fc/fs);
    t1=1+t0+t0^2;
    a01=0.5*(1-t0)/(1+t0);
    a11=(1-t0^2)/t1;
    a12=(t0-t0^2-1)/(2*t1);
    b00=g/2*1/(t0+1);
    b01=-b00;
    b10=1/(2*t1);
    b11=-2*b10;
    b12=b10;
    a02=0;
    b02=0;
    % SOS Form
    b0=2*[b00 b01 b02];
    a0=[1 -2*a01 -2*a02];
    [sos0,g0]=tf2sos(b0,a0);
    Hd0=dfilt.df1sos(sos0,g0);
    b1=2*[b10 b11 b12];
    a1=[1 -2*a11 -2*a12];
    [sos1,g1]=tf2sos(b1,a1);
    Hd1=dfilt.df1sos(sos1,g1);
    Hd=dfilt.cascade(Hd0,Hd1);
elseif N==4
    g=10^(g/20);
    t0=tan(pi*fc/fs);
    t1=1+2*cos(1/8*pi)*t0+t0^2;
    t2=1+2*cos(3/8*pi)*t0+t0^2;    
    a01=(1-t0^2)/t1;
    a02=(2*cos(1/8*pi)*t0-1-t0^2)/(2*t1);
    a11=(1-t0^2)/t2;
    a12=(2*cos(3/8*pi)*t0-1-t0^2)/(2*t2);
    b00=0.5*1/t1;
    b01=-2*b00;
    b02=b00;
    b10=g/(2*t2);
    b11=-2*b10;
    b12=b10;
    % SOS Form
    b0=2*[b00 b01 b02];
    a0=[1 -2*a01 -2*a02];
    [sos0,g0]=tf2sos(b0,a0);
    Hd0=dfilt.df1sos(sos0,g0);
    b1=2*[b10 b11 b12];
    a1=[1 -2*a11 -2*a12];
    [sos1,g1]=tf2sos(b1,a1);
    Hd1=dfilt.df1sos(sos1,g1);
    Hd=dfilt.cascade(Hd0,Hd1);
end